package com.ruoyi.teacher.service.impl;

import java.util.Date;
import java.util.List;

import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.teacher.domain.MyTask;
import com.ruoyi.teacher.domain.Task;
import com.ruoyi.teacher.domain.Teacher;
import com.ruoyi.teacher.mapper.MyTaskMapper;
import com.ruoyi.teacher.mapper.TaskMapper;
import com.ruoyi.teacher.mapper.TeacherMapper;
import com.ruoyi.teacher.service.ITaskService;
import com.ruoyi.teacher.vo.TakeTaskVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 领取任务 Service业务层处理
 *
 * @author TengZeng
 * @date 2023-05-18
 */
@Service
public class TaskServiceImpl implements ITaskService {
    @Autowired
    private TaskMapper taskMapper;

    @Autowired
    private MyTaskMapper myTaskMapper;

    @Autowired
    private TeacherMapper teacherMapper;

    /**
     * 查询领取任务
     *
     * @param id 领取任务 主键
     * @return 领取任务
     */
    @Override
    public Task selectTaskById(Long id) {
        return taskMapper.selectTaskById(id);
    }

    /**
     * 查询领取任务 列表
     *
     * @param task 领取任务
     * @return 领取任务
     */
    @Override
    public List<Task> selectTaskList(Task task) {
        return taskMapper.selectTaskList(task);
    }

    /**
     * 新增领取任务
     *
     * @param task 领取任务
     * @return 结果
     */
    @Override
    public int insertTask(Task task) {
        task.setState(1);
        task.setGetCount(0);
        return taskMapper.insertTask(task);
    }

    /**
     * 修改领取任务
     *
     * @param task 领取任务
     * @return 结果
     */
    @Override
    public int updateTask(Task task) {
        return taskMapper.updateTask(task);
    }

    /**
     * 批量删除领取任务
     *
     * @param ids 需要删除的领取任务 主键
     * @return 结果
     */
    @Override
    public int deleteTaskByIds(Long[] ids) {
        return taskMapper.deleteTaskByIds(ids);
    }

    /**
     * 删除领取任务 信息
     *
     * @param id 领取任务 主键
     * @return 结果
     */
    @Override
    public int deleteTaskById(Long id) {
        return taskMapper.deleteTaskById(id);
    }

    /**
     * 领取任务
     * <p>
     * 领取任务时判断是否为一次性任务
     * 如果是领取过后修改状态为不可领取 领取数量加1
     * 前端不显示领取任务选项
     *
     * @param vo
     * @return
     */
    @Override
    public int takeTask(TakeTaskVo vo) {
        //根据是否为一次性任务查询
        Task task = new Task();
//        task = taskMapper.findByTitle(vo.getTitle());
        try {
            //如果是一次性任务，将状态设置为不可领取，直接给总数默认值为1
            if (vo.getDisposableTask() == 1) {
                task.setState(0);
                task.setGetCount(1);
                save(vo, task);
            } else {
                task.setGetCount(vo.getGetCount() + 1);
                task.setState(1);
                save(vo, task);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
        return 1;
    }
    private void save(TakeTaskVo vo, Task task) {
        task.setId(vo.getId());
        taskMapper.updateTask(task);
        MyTask myTask = new MyTask();
        myTask.setFinish(0);
        myTask.setCreateTime(new Date());
        myTask.setEndTime(vo.getEndTime());
        myTask.setTaskName(vo.getTitle());
        myTask.setTaskContent(vo.getContent());
        myTask.setTaskId(vo.getId());
        //获取当前登录人
        LoginUser loginUser = SecurityUtils.getLoginUser();
        Long userId = loginUser.getUserId();
        Teacher teacher = teacherMapper.findByUserId(userId);
        myTask.setTeacherId(teacher.getId());
        task.setTeacherId(teacher.getId());
        myTaskMapper.insertMyTask(myTask);
        taskMapper.updateTask(task);
    }
}
